package armature;

import role.Hero;

import java.util.*;
/**
* @author: luosiyu
* @Description: 攻击类
* @Date: 2022/10/22 12:31
*/

public class Fight {
    //用于记录技能的使用次数，方便判断是否冷却技能
    private Map<Integer, Integer> map = new TreeMap(){{
        put(1, 0);
        put(2, 0);
        put(3, 0);
    }};
    //攻击方
    private Hero myhero;
    //被攻击方
    private Hero opphero;

    public Fight() {
    }

    public Fight(Hero myhero, Hero  opphero) {
        this.myhero = myhero;
        this.opphero = opphero;
    }

    public Map<Integer, Integer> getMap() {
        return map;
    }

    public Hero getMyhero() {
        return myhero;
    }

    public Hero getOpphero() {
        return opphero;
    }

    public void setOpphero(Hero opphero) {
        this.opphero = opphero;
    }

    public void setMyhero(Hero myhero) {
        this.myhero = myhero;
    }

    ///通过控制台输入选择技能，输入错误数字可以选择随机
    public void scFights(){
        Scanner input=new Scanner(System.in);
        int jn=0;
        String j2= map.get(2)>=2?"冷却中":"可用";
        String j3= map.get(3)>=1?"冷却中":"可用";
        System.out.println("技能1:可用  技能2:"+j2+"  技能3:"+j3);
        System.out.println("请选择释放的技能: 1：技能1  2：技能2  3：技能3");
        try {
            jn= input.nextInt();
        }catch (Exception e){
            System.out.println("输入类型错误");
            scFights();
            return;
        }
        if(jn!=1&&jn!=2&&jn!=3){
            System.out.println("技能输入错误，输入1启用随机技能，任意输入重选技能");
            String a= input.next();
            if(a.equals("1")) {
                ranFights();
            } else{
                scFights();
            }
            return;
        }
        sum(jn);
        if(downDamage(jn)){
            damage(jn);
        }else {
            System.out.println("技能冷却中");
            scFights();
            map.put(jn, 0);
            return;
        }
    }

    ///随机释放技能（随机数）
    public void ranFights(){
        Random random = new Random();
        int i = random.nextInt(3)+1;
        sum(i);
        if(downDamage(i)){
            damage(i);
        }else {
            ranFights();
            return;
        }

    }

    //判断技能是否冷却
    public boolean downDamage(int i){
        if(i==2){
            return map.get(i)>2?false:true;
        }
        if(i==3){
            return map.get(i)>1?false:true;
        }
        return true;
    }

    //技能使用加1
    public void sum(int i){
        map.put(i, map.get(i) + 1);
    }

    //调用攻击技能
    public void damage(int choice){
//        TransUtils.trans(myhero);
//        switch (choice) {
//            case 1:
//                opphero.attacked(myhero.getDamage1());
//                break;
//            case 2:
//                opphero.attacked(TransUtils.damage2);
//                break;
//            case 3:
//                opphero.attacked(TransUtils.damage3);
//                break;
//        }
        opphero.attacked(myhero.ChoiceDamage(choice));
    }

}
